/*
 *  Copyright (C) 2010 Fabien Renaud
 * 
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 * 
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 * 
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
package com.boc.botv.dao;

import com.boc.botv.model.User;
import java.util.List;
import org.hibernate.Session;

/**
 * Représente le DAO utilisateur
 * @author Fabien Renaud
 */
public interface UserDao {
  /**
   * Obtient tous les utilisateurs présent en base de données
   * @return Tous les utilisateurs présent en base de données
   */
  public List<User> getUsers();

  /**
   * Vérifie si un pseudo existe déjà dans la base de données
   * @param login Le pseudo à rechercher
   * @return true si le pseudo existe déjà, false sinon
   */
  public boolean loginExists(String login);

  /**
   * Met à jour un utilisateur dans la base de données
   * @param user L'utilisateur à mettre à jour
   */
  public void updateUser(User user);

  /**
   * Obtient un utilisateur selon son pseudo
   * @param login Le pseudo de l'utilisateur à rechercher
   * @return L'unique utilisateur trouvé, null sinon
   */
  public User getUser(String login);

  /**
   * Obtient un utilisateur selon son identifiant
   * @param userId l'identifiant de l'utilisateur à rechercher
   * @return L'unique utilisateur trouvé, null sinon
   */
  public User getUser(int userId);

  /**
   * Ajoute un nouvel utilisateur dans la base de données.
   * @param user L'utilisateur à ajouter à la base de données. Attention : Cette variable doit être uniquement de type User !
   */
  public void saveUser(User user);

  /**
   * Vérifie si une adresse courriel existe déjà dans la base de données
   * @param mail L'adresse courriel à rechercher
   * @return true si l'adresse courriel existe déjà, false sinon
   */
  public boolean mailExists(String mail);

  /**
   * Supprime définitivement un utilisateur de la base de données
   * @param user L'utilisateur à supprimer
   */
  public void deleteUser(User user);
}
